﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BTO;
using TISModel;

namespace DAL
{
    public class DALTipoAlojamento
    {
        public List<BTO.TipoAlojamento> list()
        {
            //Pesquisa dados
            var tipoAlojamentosEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var tipoAlojamentos = (from c in tipoAlojamentosEntities.TipoAlojamento
                            select new BTO.TipoAlojamento
                            {
                                IDTipoAlojamento = c.IDTipoAlojamento,
                                descricao = c.descricao

                            }).ToList();

            return tipoAlojamentos;
        }

        public BTO.TipoAlojamento getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var tipoAlojamentosEntities = new TISModel.TISEntities();
            var tipoAlojamento = (from c in tipoAlojamentosEntities.TipoAlojamento
                           where c.IDTipoAlojamento == id
                           select new BTO.TipoAlojamento
                           {
                               IDTipoAlojamento = c.IDTipoAlojamento,
                               descricao = c.descricao

                           }).FirstOrDefault();

            return tipoAlojamento;

        }

        public BTO.TipoAlojamento getByDescricao(String descricao)
        {
            //Pesquisa dados e cria modelo para retornar
            var tipoAlojamentosEntities = new TISModel.TISEntities();
            var tipoAlojamento = (from c in tipoAlojamentosEntities.TipoAlojamento
                                  where c.descricao == descricao
                                  select new BTO.TipoAlojamento
                                  {
                                      IDTipoAlojamento = c.IDTipoAlojamento,
                                      descricao = c.descricao

                                  }).FirstOrDefault();

            return tipoAlojamento;

        }

        public void insert(BTO.TipoAlojamento toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var tipoAlojamentoEntities = new TISModel.TISEntities();

                TISModel.TipoAlojamento tipoAlojamento = new TISModel.TipoAlojamento();
                tipoAlojamento.descricao = toInsert.descricao;
                
                tipoAlojamentoEntities.AddToTipoAlojamento(tipoAlojamento);
                tipoAlojamentoEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi possível inserir o tipo de alojamento!");
            }
        }

        public void update(BTO.TipoAlojamento toUpdate)
        {
            var tipoAlojamentoEntities = new TISModel.TISEntities();
            var tipoAlojamento = (from c in tipoAlojamentoEntities.TipoAlojamento where c.IDTipoAlojamento == toUpdate.IDTipoAlojamento select c).FirstOrDefault();


            if (tipoAlojamento != null)
            {
                try
                {
                    tipoAlojamento.descricao = toUpdate.descricao;

                    tipoAlojamentoEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível actualizar o tipo de alojamento!");
                }
            }
            else
            {
                throw new System.Exception("Tipo de alojamento não encontrado!");
            }
            
        }

        public void delete(int id)
        {
            var tipoAlojamentoEntities = new TISModel.TISEntities();
            var tipoAlojamento = (from c in tipoAlojamentoEntities.TipoAlojamento where c.IDTipoAlojamento == id select c).FirstOrDefault();

            if (tipoAlojamento != null)
            {
                try{
                    tipoAlojamentoEntities.DeleteObject(tipoAlojamento);
                    tipoAlojamentoEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível remover o tipo de alojamento!");
                }
            }
            else
            {
                throw new System.Exception("Tipo de alojamento não encontrado!");
            }

        }
    }
}
